package br.uniriotec.pssgbd.unterhaltung.model.dao;


import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;



import br.uniriotec.pssgbd.unterhaltung.model.entidade.relacionadaDegustacao.Combinacao;
import br.uniriotec.pssgbd.unterhaltung.model.entidade.relacionadaDegustacao.Degustacao;
import br.uniriotec.pssgbd.unterhaltung.model.entidade.relacionadaEstabelecimento.Estabelecimento;


public class DegustacaoDAO extends GenericDAO{
	
	  
	private String sqlSelect = "SELECT id_degust, nome_degust,data_inicial , data_final,preco_degust ,data,hora, cnpj_estab FROM degustacao";
	private CombinacaoDAO combinacaoDAO = new CombinacaoDAO ();
	private EstabelecimentoDAO estabelecimentoDAO = new EstabelecimentoDAO();
	
	public String getSqlSelect() {
		return sqlSelect;
	}

		
	public List<Degustacao> obterDegustacoes() throws ClassNotFoundException, SQLException{
		this.criaConexao(false);

		PreparedStatement stmt = null;
		ResultSet rs = null;
		Degustacao degustacao = null;
		List<Degustacao> listaDegustacoes = new ArrayList<Degustacao>();
		List <Combinacao> listaCombinacoes = new ArrayList <Combinacao>();
		
		try{
			stmt = getConnection().prepareStatement(sqlSelect);
			rs = stmt.executeQuery();
			if (rs.next()){
				degustacao = new Degustacao();				
				Estabelecimento estab = recuperarEstabelecimento(rs.getInt("cnpj_estab"));
				degustacao.setEstab(estab);
				degustacao.setId_degustacao(rs.getInt("id_degust"));
				degustacao.setNomeDegustacao(rs.getString("nome_degust"));
				listaCombinacoes = getCombinacoes(rs, estab.getCNPJ());
				degustacao.setCombinacao(listaCombinacoes);
				degustacao.setData(rs.getDate("data"));
				degustacao.setHora(rs.getTime("hora"));
				degustacao.setDataInicial(rs.getDate("data_inicial"));
				degustacao.setDataFinal(rs.getDate("data_final"));
				degustacao.setPrecoDegustacao(rs.getDouble("preco_degust"));				
				listaDegustacoes.add(degustacao);
			}
		}

		catch(SQLException e){
			throw e;
		}

		finally{
			try{
				stmt.close();
				rs.close();
				this.fechaConexao();
			} 
			catch (SQLException e) {
				throw e;
			}
		}

		return listaDegustacoes;
	}
	
	private Estabelecimento recuperarEstabelecimento (int cnpj_estab) throws SQLException,
	ClassNotFoundException{
		return estabelecimentoDAO.obterEstabelecimento(cnpj_estab);
	}
	
	private List <Combinacao> getCombinacoes(ResultSet rs, int cnpj) throws SQLException,
	ClassNotFoundException{
		return combinacaoDAO.obterCombinacoes("WHERE cnpj_estab = ? and data = ? and hora = ?", cnpj,rs.getDate("data"),rs.getTime("hora"));
	}



}
